package es.wtestgen.action.inicio;

import java.io.FileInputStream;
import java.util.Properties;
import java.util.ResourceBundle;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.DispatchAction;

import es.wtestgen.bean.inicio.LoginForm;
import es.wtestgen.domain.Alumno;
import es.wtestgen.domain.Profesor;
import es.wtestgen.domain.Usuario;
import es.wtestgen.services.IWTestGenService;
import es.wtestgen.services.WTestGenService;

public class LoginAction extends DispatchAction{
	
	private static Log log = LogFactory.getLog(LoginAction.class);
	
	public ActionForward execute(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		
		log.info("_________Estamos en la clase LoginAction para autenticar el usuario");
		
		LoginForm loginForm = (LoginForm)form;
		WTestGenService wTestGenService = WTestGenService.getInstance();
		
		boolean esAlumno = false;
		boolean esProfesor = false;
		boolean esAdmin = false;
		
		String usuario = loginForm.getNombreUsua();
		String password = loginForm.getPwdUsua();
		HttpSession session = request.getSession();;
		
		
		/**
		 * Para entrar como administrador con wtestgen y wtestgen (nombre de usuario y contrase�a)
		 */
		
		
		//El archivo .properties se llama administracion.properties
		//Está en el paquete src.main.resources
		ResourceBundle rb = ResourceBundle.getBundle("administracion");//Sin la extensión .properties
		//te devuelve rb nulo si no existe.
		//Para obtener una clave se utiliza asi.
		
				
		try {  
				
			String pwdUsua = rb.getString("pwdUsua");		       
			String nombreUsua = rb.getString("nombreUsua");

			/*
			 * Si estuviera en la raíz sería simplemente:
			 * ResourceBundle rb = ResourceBundle.getBundle("conf"); 
			 */
			
		       
		       if(nombreUsua.equals(usuario) && pwdUsua.equals(password)){
					esAdmin = true;
					Usuario admin = new Usuario(1,"Admin","Administrador","","","","","");
					session.setAttribute("usuario", admin);
					session.removeAttribute("admin");

					session.setAttribute("esAlumno", esAlumno);
					session.setAttribute("esProfesor", esProfesor);
					session.setAttribute("esAdmin", esAdmin);
					
					return mapping.findForward("logadoAdmin");		
				}else {
					
					if(wTestGenService.autenticarAlumno(usuario, password,request)){
						Alumno alumno = (Alumno)session.getAttribute("alumno");
						session.setAttribute("usuario", alumno);
						session.removeAttribute("alumno");
						esAlumno = true;			
						
						session.setAttribute("esAlumno", esAlumno);
						session.setAttribute("esProfesor", esProfesor);
						session.setAttribute("esAdmin", esAdmin);
						
						return mapping.findForward("logadoAlumno");			
					}else if(wTestGenService.autenticarProfesor(usuario, password,request)){
						Profesor profesor = (Profesor)session.getAttribute("profesor");
						session.setAttribute("usuario", profesor);
						session.removeAttribute("profesor");
						
						esProfesor = true;			
						session.setAttribute("esAlumno", esAlumno);
						session.setAttribute("esProfesor", esProfesor);			
						session.setAttribute("esAdmin", esAdmin);			
						
						return mapping.findForward("logadoProfesor");
					}else{
						return mapping.findForward("error");			
					}				
					
				}		       
		       
		       
		}catch (Exception e) {
		       /* 
		        * Manejo de excepciones
		        */
			log.info("_______Se ha producido un error de acceso a la aplicación, compruebe el fichero properties de conexiónAdmin");
			return mapping.findForward("error");
		}
		
		
		
		
	}

}
